import random
from model.models import *
import uuid

import sys, logging, hashlib

# 新用户创建，用@db.atomic()装饰器开启事务，从而实现事务的自动管理
@db.atomic()
def create_user():
    # 下面这行代码会在事务中执行，如果创建失败会自动回滚
    _id = str(uuid.uuid4())
    _username = _telephone = ''.join(i for i in random.sample("01234567890123456789", 11))
    user = User.create(name="崔文俊", username=_username, id=_id, password_enrpt="aaaaaa", telephone=_telephone)
    return user


# 测试一个事务，插入2个用户对象，第一个是新的，第二个故意让它手机号码重复，我们看看第一个是否会被写入
@db.atomic()
def create_user_with_conflict():
    _id = str(uuid.uuid4())
    _username = _telephone = ''.join(i for i in random.sample("01234567890123456789", 11))
    user1 = User.create(name="崔文俊", username=_username, id=_id, password_enrpt="aaaaaa", telephone=_telephone)
    logger.info("成功写入第一个用户对象")
    user2 = User.create(name="崔文俊测试数据", username="18896723719", id=_id, password_enrpt = "11111111111111434", telephone = "18896723719")
    logger.info("成功写入第二个用户对象")


# 演示如何插入数据，因为所有的数据模型类都继承自peewee的Model，所以这些模型类直接拥有了CRUD的功能，这比在java中还要搞一个dao要简化不少代码，
# 父类Model的方法：
# Model.create
# Model.save  Model.update
# Model.delete_instance  Model.delete
# Model.select
#


def insert_data_demo1():
    pass

# 批量插入数据
def batch_insert_data():
    # User.insert_many()
    pass



# 如果吃饱了撑的，非要自己commit和rollbock，也支持，用transaction()方法，也有2种使用方式：上下文管理器和装饰器
# with db.transaction() as txn:
#     # Delete the user and their associated tweets.
#     user.delete_instance(recursive=True)
# 数据库错误，Python的DB-API 2.0规范定义了几种数据库错误信息类，peewee定义了一个基类PeeweeException，所有其它的数据库异常都继承它


# 演示如何查询
# 先用peewee提供的query-builder API，创建各种query对象，然后调用query对象的execute方法
# 但是也可以不用这样麻烦，如果要直接执行sql，比如原生sql，就用db.execute_sql函数，但是一般不这样干，不然还要ORM框架干什么，所以都是用peewee提供的query对象
# 上的各种函数


def query_demo1():
    pass

# 演示如何更新数据
def update_row_demo1():
    pass

# 演示如何删除数据
def delete_data_demo1():
    pass


if __name__ == '__main__':
    # 打印sql查询语句
    logger = logging.getLogger("peewee_test")
    logger.setLevel(logging.DEBUG)
    logger.addHandler(logging.StreamHandler())

    # userid = "随机字符串"，python怎实现？
    # userid = random.sample("0123456789abcdefghijklmnopqrktuvwxyz", 32)
    # _id = ''.join(i for i in userid)
    # print("user id is: {}".format(_id))
    create_user_with_conflict()
    # print(user.name, user.create_date)

    sys.exit()


